//
//  ATTimer.h
//  NSTimerDemo
//
//  Created by lianglibao on 2018/11/13.
//  Copyright © 2018年 lianglibao. All rights reserved.
//

#import <Foundation/Foundation.h>


typedef void(^ATTimerPlayCompletionBlock)(NSInteger);

@interface ATTimer : NSObject

+ (instancetype)sharedInstance;

/**
 根据定时器名称初始化定时器
 
 @param name 定时器名称
 @param aTarget 定时任务调用者
 @param aSelector 定时任务
 @param yesOrNo 定时器是否重复
 */
- (void)setupTimerWithName:(NSString * _Nonnull)name
              timeInterval:(NSTimeInterval)timeInterval
                    target:(id _Nonnull)aTarget
                  selector:(SEL _Nonnull)aSelector
                   repeats:(BOOL)yesOrNo;

/**
 初始化倒计时timer
 
 @param name timer的名称
 @param totalSecond 总计时时间
 @param countdownSecond 到总计时的倒数某一秒开始执行回调block
 @param countdownBlock 到总计时的倒数某一秒开始执行的block
 */
- (void)setupCountdownTimerWithName:(NSString * _Nonnull)name
                        totalSecond:(NSInteger)totalSecond
                    countdownSecond:(NSInteger)countdownSecond
                     countdownBlock:(ATTimerPlayCompletionBlock _Nullable)countdownBlock;

/**
 根据定时器停止定时器
 
 @param name 定时器名称
 */
- (void)stopTimerWithName:(NSString * _Nonnull)name;


///<<<<============================更好的解决方案======================
/**
 初始化倒计时timer
 
 @param task 定时器会执行的block
 @param start 开始执行时间,0,立刻执行
 @param repeats 是否重复
 @param async 执行方法的线程
 */
+ (NSString *_Nullable)execTimerTask:(void (^_Nullable)(void))task
                               start:(NSTimeInterval)start
                            interval:(NSTimeInterval)interval
                             repeats:(BOOL)repeats
                               async:(BOOL)async;

/**
 初始化倒计时timer
 
 @param target 定时器selector方法执行者
 @param selector 定时器方法
 @param start 开始执行时间,0,立刻执行
 @param repeats 是否重复
 @param async 执行方法的线程
 */
+ (NSString *_Nullable)execTimerTaskTarget:(id _Nullable )target
                                  selector:(SEL _Nullable )selector
                                     start:(NSTimeInterval)start
                                  interval:(NSTimeInterval)interval
                                   repeats:(BOOL)repeats
                                     async:(BOOL)async;

/**
 初始化倒计时timer
 
 @param totalSecond 总计时时间
 @param countdownSecond 到总计时的倒数某一秒开始执行回调block
 @param countdownBlock 到总计时的倒数某一秒开始执行的block
 */
+ (NSString *_Nullable)setupCountdownTimerWithTotalSecond:(NSInteger)totalSecond
                                          countdownSecond:(NSInteger)countdownSecond
                                           countdownBlock:(ATTimerPlayCompletionBlock _Nullable)countdownBlock;
@end
